/**
 * Clase Operacion.java
 * @author Paola Garcia 10205, Diego Yon 10070, Claudia Grajeda 10118
 * Algoritmos y estructura de datos
 * Fecha de entrega: 21 noviembre 2011
 */


public class Operacion {
	
	String instruccion;
	String operando, operandos;
	int  contador, letra1, letra2 = 0;
	String operandos0;
	char[] cadena; 
	double[] operandos2;
	Aritmeticas aritmetica;
	double resultado;
	String resultado0 = "";
	boolean igual, mayor;
	
	/**
	 * Clase constructora
	 * @param ins
	 */
	
	public Operacion(String ins){
		instruccion = ins;
			
		//las instrucciones la pasamos a un arreglo
		cadena = new char [instruccion.length()];
		cadena = instruccion.toCharArray();

		//obtener la cadena de la operacion, longitud de la cadena que representa la operacion
		for (letra1 = 0; letra1 < instruccion.length(); letra1++ ){
			if ((cadena[letra1]) == ' ' ){
				contador = letra1;
			letra1 = instruccion.length();
			}
		}
		
		operando = instruccion.substring(1,contador);

		//obtener el resto de la instruccion sin el operando principal
		instruccion = instruccion.substring(contador,instruccion.length());
		letra2 = contador++;
		contador = 0;
	
		//numero de operadores
		for (letra1= letra2; letra1 < instruccion.length(); letra1++ ){
			if ((cadena[letra1]) == ' ' ){
				contador++;
			}
		}	
			
		if (operando.compareTo("EQUAL") == 0){
			operandos = instruccion.substring(1);
			
		}
		else {
			letra2--;
			operandos = instruccion.substring(letra2,instruccion.length());
		}
			
	
		aritmetica = new Aritmeticas (operandos, contador);
		operandos2 = new double[contador];
		operandos2 = aritmetica.VectorOpernados();
	
		if (operando.compareTo("+") == 0){
			resultado = aritmetica.sumar(operandos2);
			
		}
		if (operando.compareTo("-") == 0){
			resultado = aritmetica.restar(operandos2);
			
		}
		if (operando.compareTo("*") == 0){
			resultado = aritmetica.multiplicar(operandos2);
			
		}
		if (operando.compareTo("/") == 0){
			resultado = aritmetica.dividir(operandos2);
		}
		if (operando.compareTo("<") == 0){
			mayor = aritmetica.comparar_menor(operandos2);
			if (mayor)
				resultado0 = "T";
				
			else
				resultado0 = "NIL";
		}
		if (operando.compareTo(">") == 0){
			mayor = aritmetica.comparar_mayor(operandos2);
			if (mayor)
				resultado0 = "T";
			else
				resultado0 = "NIL";
		}
			
		if(operando.compareTo("EQUAL") == 0){
		      igual = aritmetica.equal(operandos2);
		      if(igual)
		    	  resultado0 = "T";
		      else
		    	  resultado0 = "NIL";
		}
	}
	
	/**
	 * Metodo que da el resultado de las operaciones
	 * @return String
	 */
	public String resultado(){
		if (resultado0 == ""){
			resultado0 = String.valueOf(resultado);
		}
		return resultado0;
	}
}
